﻿#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdbool.h>
//布尔类型
//int main()
//{
//	bool sign = false;
//	if (sign)
//		printf("true\n");
//	else
//		printf("false\n");
// return 0;
//}



//sizeof运算符
//int main()
//{
//	int a = 10;
//	printf("%d\n", a);
//	printf("%zd\n", sizeof(a=a+3));
//	printf("%d\n", a);
// return 0;
//	//即sizeof运算符后的表达式不参与运算
//	//其返回值类型为size_t，需要用%zd打印
//}

//limits.h ⽂件中说明了整型类型的取值范围。
//float.h 这个头⽂件中说明浮点型类型的取值范围
//数据类型的长度
//int main()
//{
//	printf("sizeof(char)：\t\t%zd\n", sizeof(char));
//	printf("sizeof(bool)：\t\t%zd\n", sizeof(bool));
//	printf("sizeof(short)：\t\t%zd\n", sizeof(short));
//	printf("sizeof(int)：\t\t%zd\n", sizeof(int));
//	printf("sizeof(long)：\t\t%zd\n", sizeof(long));
//	printf("sizeof(long long)：\t%zd\n", sizeof(long long));
//	printf("sizeof(float)：\t\t%zd\n", sizeof(float));
//	printf("sizeof(double)：\t%zd\n", sizeof(double));
//	printf("sizeof(long double)：\t%zd\n", sizeof(long double));
//	return 0;
//}

//局部变量和全局变量

//int m = 100;
//int z = 100;
//int main()
//{
//	int m = 200;
//	int n = 300;
//	printf("m =%d,n =%d,z =%d\n", m,n,z);
//	return 0;
//}

/*
1. 局部变量是放在内存的栈区
2. 全局变量是放在内存的静态区
3. 堆区是⽤来动态内存管理的
*/

//+-*/%
//int main()
//{
//	int m = 200;
//	int n = 300;
//	int c = 100;
//	double d = 100.0;
//	printf("double d,int c\n");
//	printf("m = %d,n = %d,\n", m,n);
//	c = m + n;
//	printf("c = m + n;c = %d\n", c);
//	c = m - n;
//	printf("c = m - n;c = %d\n", c);
//	c = m * n;
//	printf("c = m * n;c = %d\n", c);
//	c = m / n;
//	printf("c = m / n;c = %d\n", c);
//	c = n / m;
//	printf("c = n / m;c = %d\n", c);
//	d = n / m;
//	printf("d = n / m;d = %lf\n", d);
//	d = n / (double)m;
//	printf("d = n / (double)m;d = %lf\n", d);
//	d = 300.0 / 200;
//	printf("d = 300.0 / 200;d = %lf\n", d);
//
//	c = n % m;
//	printf("c = n %% m;c = %d\n", c);
//
//	//c = n % 10.1;//error
//	printf("c = n %% 10.1;//error\n");
//
//
//	return 0;
//}


//=、复合赋值、连续赋值、单目运算符++，--，强制类型转换

//int main()
//{
//	int a = 0;//初始化
//	double b = 3.1415926;
//	printf("init a =%d\n", a);
//	a = 100;//赋值
//	printf("a = 100; a =%d\n", a);
//	a += 10;//复合赋值等价于a = a+ 10;
//	printf("a += 10; a =%d\n", a);
//	a *= 10;//复合赋值等价于a = a* 10;
//	printf("a *= 10; a =%d\n", a);
//	a /= 10;//复合赋值等价于a = a/ 10;
//	printf("a /= 10; a =%d\n", a);
//	a %= 10;//复合赋值等价于a = a% 10;
//	printf("a %%= 10; a =%d\n", a);
//	printf("a++, a =%d\n", a++);
//	a++;//
//	printf("a++; a =%d\n", a);
//
//	printf("++a, a =%d\n", ++a);
//	++a;//
//	printf("++a; a =%d\n", a);
//	
//	printf("double b = 3.1415926;\n");
//	a = (int)b;
//	printf("a = (int)b; a =%d\n", a);
//	return 0;
//}

//printf
//int main()
//{
//	int a = 1234;
//	double b = 3.1415;
//	printf("Hello!");
//	printf("Hello!\n");
//	printf("Hello,%s\n","world");
//	printf("Hello,%.3s\n", "world");
//	printf("Hello,%d\n", 123);
//	printf("Hello,%f\n", 123.567);
//	printf("Hello,%6d\n", a);
//	printf("Hello,%-6d\n", a);
//	printf("Hello,%8f\n", b);
//	printf("Hello,%4f\n", b);
//	printf("Hello,%.2f\n", b);
//	printf("Hello,%8.2f\n", b);
//	printf("Hello,%-8.2f\n", b);
//	return 0;
//}


//scanf
//需要在程序第一行加入,不然会报错
//#define _CRT_SECURE_NO_WARNINGS
int main()
{
	int a = 0;
	int count = 0;
	char ss = 0;
	char my_string[11] = { 0 };
	int year=0, month = 0, day = 0;
	printf("请输入a:\n");
	count=scanf("%d",&a);
	scanf("%c",&ss);//清除换行符对下次读取数据的影响
	printf("count=%d\n", count);
	printf("a=%d\n", a);
	printf("请输入0/1/2/3\n");
	//在⽅括号中指定⼀组匹配的字符（⽐如 %[0，1，2，3] ），遇到不在集合之中的字符，匹配将会停⽌。
	count = scanf("%[0，1，2，3]", &a);
	
	printf("count=%d\n", count);
	if(count>=1)
		printf("char a=\'%c\'\n", a);
	else
	{
		scanf("%c", &ss);//清除错误数据对下次读取数据的影响
		printf("输入参数非法\n");
	}
	scanf("%c", &ss);//清除换行符对下次读取数据的影响
	printf("请输入字符(不忽略空格)\n");
	//在⽅括号中指定⼀组匹配的字符（⽐如 %[0，1，2，3] ），遇到不在集合之中的字符，匹配将会停⽌。
	count = scanf("%c", &ss);

	printf("count=%d\n", count);
	printf("char ss=\'%c\'\n", ss);
	scanf("%c", &ss);//清除换行符对下次读取数据的影响


	printf("请输入字符(忽略空格)\n");
	//在⽅括号中指定⼀组匹配的字符（⽐如 %[0，1，2，3] ），遇到不在集合之中的字符，匹配将会停⽌。
	count = scanf(" %c", &ss);
	printf("count=%d\n", count);
	printf("char ss=\'%c\'\n", ss);
	scanf("%c", &ss);//清除换行符对下次读取数据的影响

	printf("请输入字符串\n");
	count = scanf("%10s", my_string);
	printf("count=%d\n", count);
	printf("my_string=\"%s\"\n", my_string);
	scanf("%c", &ss);//清除换行符对下次读取数据的影响
	//如果超过长度虽然不会导致数组越界，但是会导致下一次读取时读到很多无关的上次残留的字符
	
	//如果输入字符串超过10个会导致越界访问
	//printf("请输入字符串\n");
	//count = scanf("%s", my_string);
	//printf("count=%d\n", count);
	//printf("my_string=%s\n", my_string);
	//scanf("%c", &ss);//清除换行符对下次读取数据的影响

	//应用复制忽略符，使输入格式可以更加自由
	printf("请输入字符串 格式：year month day//间隔符任意\n");
	count = scanf("%d%*c%d%*c%d", &year, &month, &day );
	printf("count=%d\n", count);
	printf("data:%d-%d-%d\n", year, month, day);
	scanf("%c", &ss);//清除换行符对下次读取数据的影响

	printf("请输入日期：格式：year-month-day\n");
	count = scanf("%d-%d-%d", &year, &month, &day);
	printf("count=%d\n", count);
	if (count >= 3)
		printf("data:%d-%d-%d\n", year, month, day);
	else
	{
		printf("输入参数非法\n");
	}
}
